
// <copyright file="IMetricsEnabledComponentController.cs" company="Subhadra Software Solutions">
//   
// </copyright>
// <summary>
//   The MetricsEnabledComponentController interface.
// </summary>

namespace SubhadraSolutions.Sharp.Utils.Contracts
{
    using System;

    using SubhadraSolutions.Sharp.Utils.Diagnostics.Performance;

    /// <summary>
    /// The MetricsEnabledComponentController interface.
    /// </summary>
    [PerfCounterCategory("Metrics Enabled Component Controllers")]
    public interface IMetricsEnabledComponentController : IComponentController
    {
        #region Public Properties

        /// <summary>
        /// Gets the busy percentage.
        /// </summary>
        [PerfCounter]
        double BusyPercentage { get; }

        /// <summary>
        /// Gets the idle percentage.
        /// </summary>
        [PerfCounter]
        double IdlePercentage { get; }

        /// <summary>
        /// Gets the number of threads being served.
        /// </summary>
        [PerfCounter]
        long NumberOfThreadsBeingServed { get; }

        /// <summary>
        /// Gets the time spent in busy.
        /// </summary>
        [PerfCounter]
        TimeSpan TimeSpentInBusy { get; }

        /// <summary>
        /// Gets the time spent in idle.
        /// </summary>
        [PerfCounter]
        TimeSpan TimeSpentInIdle { get; }

        /// <summary>
        /// Gets the time spent in paused.
        /// </summary>
        [PerfCounter]
        TimeSpan TimeSpentInPaused { get; }

        /// <summary>
        /// Gets the time spent in stopped.
        /// </summary>
        [PerfCounter]
        TimeSpan TimeSpentInStopped { get; }

        #endregion Public Properties
    }
}